<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		注这个事例中的金额计算是出于简化用的加减乘除，其实是存在浮点计算隐患的。。实际工作中如果涉及金额计算一定要用BigDecimal。
	</body>
	<script>
		//价格策略对象
		var PriceStrategy = function() {
			//内部算法对象
			var stragtegy = {
				//100返30
				return30: function(price) {
					return +price + parseInt(price / 100) * 30;
				},
				//100返50
				return50: function(price) {
					return +price + parseInt(price / 100) * 50;
				},
				//9折
				percent90: function(price) {
					// Javascript在处理小数乘除法有bug, 故运算前转化为整数
					return price * 100 * 90 / 10000;
				},
				//8折
				percent80: function(price) {
					return price * 100 * 80 / 10000;
				},
				//5折
				percent50: function() {
					return price * 100 * 50 / 10000;
				}
			}
			//策略算法调用接口
			return function(algorithm, price) {
				//如果算法存在，则调用算法，否则返回false
				return stragtegy[algorithm] && stragtegy[algorithm](price)
			}
		}();

		var price = PriceStrategy('return50', '314.67');
		console.log(price); // 464.67
	</script>

</html>